From 5da3089fa72ac87e8e9ccaf0fc9ccfbbfb2c22d5 Mon Sep 17 00:00:00 2001 From: x4m Date: Sun, 3 Jul 2016 12:51:55 +0500 Subject: [PATCH] fix --- src/backend/access/gist/gist.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/backend/access/gist/gist.c b/src/backend/access/gist/gist.c index 996363c..49c4560 100644 --- a/src/backend/access/gist/gist.c +++ b/src/backend/access/gist/gist.c @@ -503,9 +503,44 @@ gistplacetopage(Relation rel, Size freespace, GISTSTATE *giststate, * PageIndexTupleDelete() here and PageIndexMultiDelete() in * gistRedoPageUpdateRecord() */ + +#ifdef OLDBEHAVIOR if (OffsetNumberIsValid(oldoffnum)) PageIndexTupleDelete(page, oldoffnum); gistfillbuffer(page, itup, ntup, InvalidOffsetNumber); +#else + if (OffsetNumberIsValid(oldoffnum)) + { + if(ntup==1) + { + ItemId itemId; + Size newsz; + Item pageItem; + newsz = IndexTupleSize(*itup); + itemId = PageGetItemId(page,oldoffnum); + pageItem = PageGetItem(page,itemId); + if(IndexTupleSize(pageItem)==newsz) + { + memmove(pageItem,*itup,newsz); + } + else + { + PageIndexTupleDelete(page, oldoffnum); + gistfillbuffer(page, itup, ntup, InvalidOffsetNumber); + } + } + else + { + PageIndexTupleDelete(page, oldoffnum); + gistfillbuffer(page, itup, ntup, InvalidOffsetNumber); + } + } + else + { + gistfillbuffer(page, itup, ntup, InvalidOffsetNumber); + } +#endif + MarkBufferDirty(buffer);